home *** CD-ROM | disk | FTP | other *** search
- UNIT BBSTACK;
-
- INTERFACE
-
- USES
- bbdummy;
-
- TYPE stack_key = STRING[10];
-
- PROCEDURE stack_push(key : stack_key);
- PROCEDURE stack_test(key : stack_key);
- PROCEDURE stack_pop(key : stack_key);
- PROCEDURE stack_depth;
- PROCEDURE stack_record(this_tcb : tcb_ptr);
-
- IMPLEMENTATION
-
- USES
- bbtrace;
-
- {$UNDEF POP}
- {$DEFINE DEPTH}
-
- PROCEDURE stack_push(key : stack_key);
-
- BEGIN;
-
- {$IFDEF POP}
-
- IF active_tcb = NIL THEN EXIT;
-
- INC(active_tcb^.stack_cnt);
- IF active_tcb^.stack_cnt <= 10 THEN
- active_tcb^.stack_temp[active_tcb^.stack_cnt] := SPTR;
-
- {$ENDIF}
-
- END;
-
- PROCEDURE stack_test(key : stack_key);
- BEGIN;
-
- {$IFDEF POP}
-
- IF active_tcb = NIL THEN EXIT;
-
- IF active_tcb^.stack_cnt = 0 THEN
- BEGIN;
- WRITELN('Pop count = 0');
- HALT;
- END;
-
- IF (active_tcb^.stack_cnt <= 10) AND
- (active_tcb^.stack_temp[active_tcb^.stack_cnt] <> SPTR) THEN
- BEGIN;
- WRITELN('Stack Mismatch - ', key);
- WRITELN('Expected = ',
- active_tcb^.stack_temp[active_tcb^.stack_cnt]);
- WRITELN('Got = ', SPTR);
- HALT;
- END;
-
- {$ENDIF}
-
- END;
-
- PROCEDURE stack_pop(key : stack_key);
-
- BEGIN;
-
- {$IFDEF POP}
-
- IF active_tcb = NIL THEN EXIT;
-
- IF active_tcb^.stack_cnt = 0 THEN
- BEGIN;
- WRITELN('Pop count = 0');
- HALT;
- END;
-
- IF (active_tcb^.stack_cnt <= 10) AND
- (active_tcb^.stack_temp[active_tcb^.stack_cnt] <> SPTR) THEN
- BEGIN;
- WRITELN('Stack Mismatch - ', key);
- WRITELN('Expected = ',
- active_tcb^.stack_temp[active_tcb^.stack_cnt]);
- WRITELN('Got = ', SPTR);
- HALT;
- END;
-
- DEC(active_tcb^.stack_cnt); *)
-
- {$ENDIF}
-
- END;
-
- PROCEDURE stack_depth;
- BEGIN;
-
- {$IFDEF DEPTH}
-
- IF active_tcb = NIL THEN EXIT;
-
- IF active_tcb^.stack_usage > SPTR THEN
- BEGIN;
- active_tcb^.stack_usage := SPTR;
- IF SPTR < 1024 THEN
- WRITELN('Stack space low -- ', active_tcb^.stack_usage,
- ' -- ', active_tcb^.tcb_number,
- ' -- ', active_tcb^.tcb_name);
- END;
-
- {$ENDIF}
-
- END;
-
- PROCEDURE stack_record(this_tcb : tcb_ptr);
- BEGIN;
-
- {$IFDEF DEPTH}
-
- IF this_tcb = NIL THEN EXIT;
-
- trace_data('SR', this_tcb^.tcb_number,
- PTR(SSEG, this_tcb^.stack_usage), '');
-
- {$ENDIF}
-
- END;
-
- END.